package cn.bluedot.util;

import java.io.File;
import java.io.IOException;
 
/**
 * MYSQL 备份工具类
 * @author hxp
 * 2019年5月9日 下午12:05:35
 */
public class MySQLDatabaseBackupUtils {
 
    /**
     * 备份数据库某些表
     *
     * @param host IP地址
     * @param userName 数据库的用户名
     * @param password 数据库的密码
     * @param savePath 备份文件的地址
     * @param fileName 备份文件名称
     * @param databaseName 需要备份的数据库的名称
     * @param tableNames 表名如:test1 test2 test3
     * @return 备份成功返回true, 否则返回false
     */
    public static boolean backup(String host, String userName, String password, String savePath, String fileName,
                                 String databaseName, String tableNames, String mysqlBin) {
        File saveFile = new File(savePath);
        if (!saveFile.exists()) {// 如果目录不存在
            saveFile.mkdirs();// 创建文件夹
        }
        if (!savePath.endsWith(File.separator)) {
            savePath = savePath + File.separator;
        }
 
        //拼接命令行的命令
        // mysqldump --opt --host=localhost --databases backup --tables log_sys sys_user --user=root --password=root --result-file=E:\Sqldata\test.sql --default-character-set=utf8
        StringBuilder cmd = new StringBuilder();
        cmd.append(mysqlBin).append("\\mysqldump").append(" --opt")
            .append(" --host=").append(host)
            .append(" --databases ").append(databaseName)
            .append(" --tables ").append(tableNames)
            .append(" --user=").append(userName)
            .append(" --password=").append(password)
            .append(" --result-file=").append(savePath + fileName)
            .append(" --default-character-set=utf8 ");
        try {
            //调用外部执行exe文件的javaAPI
            Process process = Runtime.getRuntime().exec(cmd.toString());
            if (process.waitFor() == 0) {// 0 表示线程正常终止
                return true;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return false;
    }
       
}